package it.tempogara;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;


public class Engine {

	/**
	 * @param args
	 */
	public class ComparatorPunteggi implements Comparator {

	    public int compare(Object arg0, Object arg1) {
	        String team0 = (String) arg0;
	        String team1 = (String) arg1;
//	       	String val="COGNOME_"+values[indexCognome]+"_CAT_"+values[indexCat]+"_PCAT_"+values[indexPosCat]+"_TIPOCLASS_"+values[indexTipoClass]+"_SESSO_"+values[indexSesso];
	        Integer punt1=Integer.valueOf(team0.split("_")[team0.split("_").length-1]);
	        Integer punt2=Integer.valueOf(team1.split("_")[team1.split("_").length-1]);
	        return punt1.compareTo(punt2);

//	        int flag = user0.getAge().compareTo(user1.getAge());
//	        if (flag == 0) {
//	            return user0.getName().compareTo(user1.getName());
//	        } else {
//	            return flag;
//	        }
	    }

	}
	
	public class ComparatorComponenti implements Comparator {

	    public int compare(Object arg0, Object arg1) {
	        String user0 = (String) arg0;
	        String user1 = (String) arg1;
//	       	String val="COGNOME_"+values[indexCognome]+"_CAT_"+values[indexCat]+"_PCAT_"+values[indexPosCat]+"_TIPOCLASS_"+values[indexTipoClass]+"_SESSO_"+values[indexSesso];
	        Integer punt1=Integer.valueOf(user0.split("_")[5]);
	        Integer punt2=Integer.valueOf(user1.split("_")[5]);
	        return punt1.compareTo(punt2);

//	        int flag = user0.getAge().compareTo(user1.getAge());
//	        if (flag == 0) {
//	            return user0.getName().compareTo(user1.getName());
//	        } else {
//	            return flag;
//	        }
	    }

	}
	
//	private String[] divisioni;
	private String[] classifications;
	private String[] pathCSV;
	private HashMap<String, ArrayList<String>> socMap;
	private String destination;
	private int puntPart1;
	private int puntPart2;

	private boolean ordinamentoClassificati;
	private boolean maschile;
	public boolean isMaschile() {
		return maschile;
	}
	private boolean ordinamentoComponenti;



	public void setMaschile(boolean maschile) {
		this.maschile = maschile;
	}



	public boolean isFemminile() {
		return femminile;
	}



	public void setFemminile(boolean femminile) {
		this.femminile = femminile;
	}

	private boolean femminile;

	public boolean isOrdinamentoClassificati() {
		return ordinamentoClassificati;
	}



	public void setOrdinamentoClassificati(boolean ordinamentoClassificati) {
		this.ordinamentoClassificati = ordinamentoClassificati;
	}



	public boolean getOrdinamentoComponenti() {
		return ordinamentoComponenti;
	}



	public void setOrdinamentoComponenti(boolean ordinamentoComponenti) {
		this.ordinamentoComponenti = ordinamentoComponenti;
	}



	public String getDestination() {
		return destination;
	}



	public void setDestination(String destination) {
		this.destination = destination;
	}



	public int getPuntPart1() {
		return puntPart1;
	}



	public void setPuntPart1(int puntPart1) {
		this.puntPart1 = puntPart1;
	}



	public int getPuntPart2() {
		return puntPart2;
	}



	public void setPuntPart2(int puntPart2) {
		this.puntPart2 = puntPart2;
	}



//	private ArrayList<String> socValues;
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Engine e = new Engine(new String[]{"f1","f2","f3"}, new String[]{"C:\\Tempogara.it\\files\\Gare2014\\01_CROSSCASSANO\\CSV\\PARTENZA1_Generale_CLASSIFICA_TEMPO_PARTENZA1___Assoluta.csv","C:\\Tempogara.it\\files\\Gare2014\\01_CROSSCASSANO\\CSV\\PARTENZA2_Generale_CLASSIFICA_TEMPO_PARTENZA2___Assoluta.csv"});
		e.run();
	}
	
	

	public Engine(String[] classifications, String[] pathCSV) {
		super();
		this.classifications = classifications;
		this.pathCSV = pathCSV;
		this.socMap = new HashMap<String,ArrayList<String>>();
		this.destination=null;
		this.puntPart1=0;
		this.puntPart2=0;
		this.ordinamentoClassificati=false;
		this.maschile=false;
		this.femminile=false;
		this.ordinamentoComponenti=false;
		
	}

	public void run() throws Exception{
		loadCSVFiles(pathCSV);
		HashMap<String, Integer> classifica = new HashMap<String, Integer>();
		HashMap<String, ArrayList<String>> classificaEstesa = new HashMap<String, ArrayList<String>>();
		HashMap<String, Integer> classificaF = new HashMap<String, Integer>();
		HashMap<String, ArrayList<String>> classificaEstesaF = new HashMap<String, ArrayList<String>>();
		for(String key : socMap.keySet()){
			int counterf1=0;
			int counterf2=0;
			int punteggiof1=0;
			int punteggiof23=0;
			int counterf1f=0;
			int counterf2f=0;
			int punteggiof1f=0;
			int punteggiof23f=0;
			boolean found=false;
			boolean foundF=false;
			ArrayList<String> values = socMap.get(key);
			java.util.Iterator<String> it = values.iterator();
			ArrayList<Integer> puntiCat = new ArrayList<Integer>(); 
			ArrayList<String> particolari = new ArrayList<String>();
			ArrayList<String> particolarif = new ArrayList<String>();
			while(it.hasNext()){
				String val = it.next();
				String[] vals = val.split("_");
				String cat = "";
				String pcat = "";
				String tipoClass = "";
				String sesso = "";
				for(int i =0;i<vals.length;i++){
					if(vals[i].equalsIgnoreCase("Cat")){
						if(i+1<vals.length)
							cat=vals[i+1];
					}else if(vals[i].equalsIgnoreCase("pcat")){
						if(i+1<vals.length)
							pcat=vals[i+1];
					}else if(vals[i].equalsIgnoreCase("TipoClass")){
						if(i+1<vals.length)
							tipoClass=vals[i+1];
					}
					else if(vals[i].equalsIgnoreCase("Sesso")){
						if(i+1<vals.length)
							sesso=vals[i+1];
					}
				}
				if(tipoClass.equalsIgnoreCase(classifications[0])&& sesso.equalsIgnoreCase("M")&&maschile&&counterf1<7){
					if(puntPart1==0)
						puntPart1=40;
					int punti=puntPart1+1-Integer.valueOf(pcat);
					if(punti<0)
						punti=1;
					punteggiof1 += punti;
					System.out.println(key+" : "+val+" PUNTI: "+punti);
					particolari.add(val+"_PUNTI_"+punti);
					counterf1++;
					found=true;
				}else if((tipoClass.equalsIgnoreCase(classifications[1])||tipoClass.equalsIgnoreCase(classifications[2]))&& sesso.equalsIgnoreCase("M")&&maschile&&counterf2<3){
					if(puntPart2==0)
						puntPart2=30;
					int punti=puntPart2+1-Integer.valueOf(pcat);
					if(punti<0)
						punti=1;
					punteggiof23 += punti;
					System.out.println(key+" : "+val+" PUNTI: "+punti);
					particolari.add(val+"_PUNTI_"+punti);
					counterf2++;
					found=true;

				}
				
				if(tipoClass.equalsIgnoreCase(classifications[0])&& sesso.equalsIgnoreCase("F")&&femminile&&counterf1f<6){
					if(puntPart1==0)
						puntPart1=40;
					int punti=puntPart1+1-Integer.valueOf(pcat);
					if(punti<0)
						punti=1;
					punteggiof1f += punti;
					System.out.println(key+" : "+val+" PUNTI: "+punti);
					particolarif.add(val+"_PUNTI_"+punti);
					counterf1f++;
					foundF=true;
				}else if((tipoClass.equalsIgnoreCase(classifications[1])||tipoClass.equalsIgnoreCase(classifications[2]))&& sesso.equalsIgnoreCase("F")&&femminile&&counterf2f<2){
					if(puntPart2==0)
						puntPart2=30;
					int punti=puntPart2+1-Integer.valueOf(pcat);
					if(punti<0)
						punti=1;
					punteggiof23f += punti;
					System.out.println(key+" : "+val+" PUNTI: "+punti);
					particolarif.add(val+"_PUNTI_"+punti);
					counterf2f++;
					found=true;
				}
			}
			if(found){
				classificaEstesa.put(key, particolari);
				classifica.put(key, new Integer(punteggiof1+punteggiof23));
			}
			if(foundF){
				classificaEstesaF.put(key, particolarif);
				classificaF.put(key, new Integer(punteggiof1f+punteggiof23f));
			}
	
		}
		
	/*	ArrayList<String> lines = generateSortedClass(classifica,classificaEstesa);
		ArrayList<String> linesPart = generateSortedClassEstesa(classifica,classificaEstesa);
		ArrayList<String> linesF = generateSortedClass(classificaF,classificaEstesaF);
		ArrayList<String> linesPartF = generateSortedClassEstesa(classificaF,classificaEstesaF);
*/
		if(destination==null)
			destination="CSV";
		
		if(maschile){
			ArrayList<String> lines = generateSortedClass(classifica,classificaEstesa);
			ArrayList<String> linesPart = generateSortedClassEstesa(classifica,classificaEstesa);
			printCSVClass(lines, destination+"\\Classifica_societa_FIDAL_M.csv");
			printCSVClassEstesa(linesPart, destination+"\\Classifica_societa_ESTESA_FIDAL_M.csv");
		}
		if(femminile){
			ArrayList<String> linesF = generateSortedClass(classificaF,classificaEstesaF);
			ArrayList<String> linesPartF = generateSortedClassEstesa(classificaF,classificaEstesaF);
			printCSVClass(linesF, destination+"\\Classifica_societa_FIDAL_F.csv");
			printCSVClassEstesa(linesPartF, destination+"\\Classifica_societa_ESTESA_FIDAL_F.csv");
		}
	}
	
	
	public ArrayList<String> generateSortedClass2(HashMap<String,ArrayList<String>> classificaEstesa,int max1, int max2){
		int counterPos=0;
		ArrayList<String> result= new ArrayList<String>();
		HashMap<String,Integer> classTemp = new HashMap<String, Integer>();
		for(String key : classificaEstesa.keySet()){
			ArrayList<String> particolari = classificaEstesa.get(key);
			ArrayList<Integer> punteggiF1 = new ArrayList<Integer>();
			ArrayList<Integer> punteggiF2 = new ArrayList<Integer>();
			java.util.Iterator<String> it = particolari.iterator();
			while(it.hasNext()){
				String[] vals = it.next().split("_");
				if(vals[7].equalsIgnoreCase(classifications[0]))
					punteggiF1.add(Integer.valueOf(vals[11]));
				else if(vals[7].equalsIgnoreCase(classifications[2])||vals[7].equalsIgnoreCase(classifications[1]))
					punteggiF2.add(Integer.valueOf(vals[11]));
			}
			Collections.sort(punteggiF1);
			Collections.sort(punteggiF2);
			Iterator<Integer> itF1 = punteggiF1.iterator();
			Iterator<Integer> itF2 = punteggiF2.iterator();
			int counterF1=0,counterF2=0;
			int punteggio=0;
			while(itF1.hasNext()&&counterF1<max1){
				punteggio+=itF1.next();
				counterF1++;
			}
			while(itF2.hasNext()&&counterF2<max2){
				punteggio+=itF2.next();
				counterF2++;
			}
//			counterPos++;
//			String line = counterPos+";"+key+";"+punteggio;
//			result.add(line);
			classTemp.put(key, punteggio);
		}
		
		int maxPunt=0;
		int maxPartecipanti=0;
		int totale = classTemp.size();
		int counter=0;
		String keyMin=null;
//		ArrayList<String> lines = new ArrayList<String>();
		while(counter<totale){
			for(String key:classTemp.keySet()){		
				Integer punti = classTemp.get(key);
				if(ordinamentoComponenti==true){
					ArrayList<String> atls = classificaEstesa.get(keyMin);
					int partecipanti = atls.size();
					if(maxPunt<punti && partecipanti<maxPartecipanti){
						maxPunt=punti;
						maxPartecipanti=partecipanti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}				
				}
			}
			counter++;
			maxPunt=0;
			result.add(counter+";"+keyMin+";"+classTemp.get(keyMin)+";"+maxPartecipanti);
			System.out.println(counter+";"+keyMin+";"+classTemp.get(keyMin)+";"+maxPartecipanti);
			classTemp.remove(keyMin);
		}
		return result;
	}
	
//	public ArrayList<String> generateSortedClass2(HashMap<String,ArrayList<String>> classificaEstesa){
//		int counterPos=0;
//		ArrayList<String> result= new ArrayList<String>();
//		for(String key : classificaEstesa.keySet()){
//			ArrayList<String> particolari = classificaEstesa.get(key);
//			ArrayList<Integer> punteggiF1 = new ArrayList<Integer>();
//			ArrayList<Integer> punteggiF2 = new ArrayList<Integer>();
//			java.util.Iterator<String> it = particolari.iterator();
//			while(it.hasNext()){
//				String[] vals = it.next().split("_");
//				if(vals[8].equalsIgnoreCase(classifications[0]))
//					punteggiF1.add(Integer.valueOf(vals[12]));
//				else if(vals[8].equalsIgnoreCase(classifications[2])||vals[8].equalsIgnoreCase(classifications[1]))
//					punteggiF2.add(Integer.valueOf(vals[12]));
//			}
//			Collections.sort(punteggiF1);
//			Collections.sort(punteggiF2);
//			Iterator<Integer> itF1 = punteggiF1.iterator();
//			Iterator<Integer> itF2 = punteggiF2.iterator();
//			int counterF1=0,counterF2=0;
//			int punteggio=0;
//			while(itF1.hasNext()&&counterF1<6){
//				punteggio+=itF1.next();
//			}
//			while(itF2.hasNext()&&counterF2<2){
//				punteggio+=itF2.next();
//			}
//			counterPos++;
//			String line = counterPos+";"+key+";"+punteggio;
//			result.add(line);
//		}
//		return null;
//	}
	
	public ArrayList<String> generateSortedClass2Estesa(HashMap<String,ArrayList<String>> classificaEstesa,int max1, int max2){
		int counterPos=0;
		ArrayList<String> result= new ArrayList<String>();
		HashMap<String,Integer> classTemp = new HashMap<String, Integer>();
		for(String key : classificaEstesa.keySet()){
			ArrayList<String> particolari = classificaEstesa.get(key);
			ArrayList<Integer> punteggiF1 = new ArrayList<Integer>();
			ArrayList<Integer> punteggiF2 = new ArrayList<Integer>();
			java.util.Iterator<String> it = particolari.iterator();
			while(it.hasNext()){
				String[] vals = it.next().split("_");
				if(vals[7].equalsIgnoreCase(classifications[0]))
					punteggiF1.add(Integer.valueOf(vals[11]));
				else if(vals[7].equalsIgnoreCase(classifications[2])||vals[7].equalsIgnoreCase(classifications[1]))
					punteggiF2.add(Integer.valueOf(vals[11]));
			}
			Collections.sort(punteggiF1);
			Collections.sort(punteggiF2);
			Iterator<Integer> itF1 = punteggiF1.iterator();
			Iterator<Integer> itF2 = punteggiF2.iterator();
			int counterF1=0,counterF2=0;
			int punteggio=0;
			while(itF1.hasNext()&&counterF1<max1){
				punteggio+=itF1.next();
				counterF1++;
			}
			while(itF2.hasNext()&&counterF2<max2){
				punteggio+=itF2.next();
				counterF2++;
			}
//			counterPos++;
//			String line = counterPos+";"+key+";"+punteggio;
//			result.add(line);
			classTemp.put(key, punteggio);
		}
		
		int maxPunt=0;
		int maxPartecipanti=0;
		int totale = classTemp.size();
		int counter=0;
		String keyMin=null;
//		ArrayList<String> lines = new ArrayList<String>();
		while(counter<totale){
			for(String key:classTemp.keySet()){		
				Integer punti = classTemp.get(key);
				if(ordinamentoComponenti==true){
					ArrayList<String> atls = classificaEstesa.get(keyMin);
					int partecipanti = atls.size();
					if(maxPunt<punti && partecipanti<maxPartecipanti){
						maxPunt=punti;
						maxPartecipanti=partecipanti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}				
				}
			}
			counter++;
			maxPunt=0;
			result.add("POS;SQUADRA;PUNTI");
			result.add(counter+";"+keyMin+";"+classTemp.get(keyMin)+";");
			result.add("ATLETI");
			result.add("COGNOME;CAT;PCAT;TIPOCLASS;SESSO;PUNTI");
			java.util.Iterator<String> it2 = classificaEstesa.get(keyMin).iterator();
			while(it2.hasNext()){
				result.add(it2.next());
			}
			System.out.println(counter+";"+keyMin+";"+classTemp.get(keyMin)+";");
			classTemp.remove(keyMin);
		}
		return result;
	}
	
	public ArrayList<String> generateSortedClass(HashMap<String, Integer> classifica,HashMap<String, ArrayList<String>> classificaEstesa){
		HashMap<String,Integer> temp = (HashMap<String, Integer>) classifica.clone();
		int maxPunt=0;
		int maxClassificati=0;
		int maxPartecipanti=0;
		int totale = classifica.size();
		int counter=0;
		String keyMin=null;
		ArrayList<String> lines = new ArrayList<String>();
		while(counter<totale){
			if (ordinamentoClassificati) {
				for (String key : temp.keySet()) {
					int classif = classificaEstesa.get(key).size();
					if (maxClassificati < classif) {
						maxClassificati = classif;
						//					keyMin=key;
					}
				}
			}
			if(ordinamentoComponenti){
				for(String key:temp.keySet()){
					ArrayList<String> atls = classificaEstesa.get(key);
					int partecipanti = atls.size();
					if(maxPartecipanti<partecipanti){
						maxPartecipanti=partecipanti;
					}
				}
			}
			for(String key:temp.keySet()){		
				Integer punti = temp.get(key);
				if(ordinamentoClassificati){
					if(maxPunt<punti&&classificaEstesa.get(key).size()==maxClassificati){
						maxPunt=punti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}
				if(ordinamentoComponenti==true){
					ArrayList<String> atls = classificaEstesa.get(key);
					int partecipanti = atls.size();
					if(maxPunt<punti && maxPartecipanti==partecipanti){
						maxPunt=punti;
//						maxPartecipanti=partecipanti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}				
				}
			}
			counter++;
			maxPunt=0;
			maxClassificati=0;
			if(classificaEstesa.get(keyMin)!=null)
				lines.add(counter+";"+keyMin+";"+temp.get(keyMin)+";"+classificaEstesa.get(keyMin).size());
			
			lines.add(counter+";"+keyMin+";"+temp.get(keyMin)+";"+classificaEstesa.get(keyMin).size());
			System.out.println(counter+";"+keyMin+";"+temp.get(keyMin)+";");
			temp.remove(keyMin);
			maxPartecipanti=0;
		}
		}
//		if(ordinamentoComponenti)
//			Collections.sort(lines, new ComparatorComponenti());
		return lines;
	}
	
	public ArrayList<String> generateSortedClassEstesa(HashMap<String, Integer> classifica,HashMap<String, ArrayList<String>> classificaEstesa){
		int maxPunt=0;
		int maxPartecipanti=0;
		int totale = classifica.size();
		int counter=0;
		int maxClassificati=0;
		String keyMin=null;
		ArrayList<String> lines = new ArrayList<String>();
		while(counter<totale){
			if (ordinamentoClassificati) {
				for (String key : classifica.keySet()) {
					int classif = classificaEstesa.get(key).size();
					if (maxClassificati < classif) {
						maxClassificati = classif;
						//					keyMin=key;
					}
				}
			}
			if(ordinamentoComponenti){
				for(String key:classifica.keySet()){
					ArrayList<String> atls = classificaEstesa.get(key);
					int partecipanti = atls.size();
					if(maxPartecipanti<partecipanti){
						maxPartecipanti=partecipanti;
					}
				}
			}
			for(String key:classifica.keySet()){		
				Integer punti = classifica.get(key);
				if(ordinamentoClassificati){
					if(maxPunt<punti&&classificaEstesa.get(key).size()==maxClassificati){
						maxPunt=punti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}
				if(ordinamentoComponenti==true){
					ArrayList<String> atls = classificaEstesa.get(key);
					int partecipanti = atls.size();
					if(maxPunt<punti && maxPartecipanti==partecipanti){
						maxPunt=punti;
//						maxPartecipanti=partecipanti;
						keyMin=key;
					}
				}else{
					if(maxPunt<punti){
						maxPunt=punti;
						keyMin=key;
					}				
				}
			}
			counter++;
			maxPunt=0;
			maxClassificati=0;
			System.out.println(counter+";"+keyMin+";"+classifica.get(keyMin)+";");
//			lines.add("SQUADRA");
			lines.add("POS;SQUADRA;PUNTI;CLASSIFICATI");
			lines.add(counter+";"+keyMin+";"+classifica.get(keyMin)+";"+classificaEstesa.get(keyMin).size());
			lines.add("POS;SQUADRA;PUNTI;NUM.COMPONENTI");
			lines.add(counter+";"+keyMin+";"+classifica.get(keyMin)+";"+maxPartecipanti);
			lines.add("ATLETI");
			lines.add("COGNOME;CAT;PCAT;TIPOCLASS;SESSO;PUNTI");
			java.util.Iterator<String> it2 = classificaEstesa.get(keyMin).iterator();
			while(it2.hasNext()){
				lines.add(it2.next());
			}
			System.out.println(counter+";"+keyMin+";"+classifica.get(keyMin)+";");
			classifica.remove(keyMin);
		}
		}
		return lines;
	}
	
	public void printCSVClass(ArrayList<String> lines,String path) throws IOException{
		File f = new File(path);
		if(!f.exists())
			f.createNewFile();
		BufferedWriter out = new BufferedWriter(new FileWriter(f));
		out.write("POS;SQUADRA;PUNTEGGIO;CLASSIFICATI");
		out.newLine();
		java.util.Iterator<String> it = lines.iterator();
		while(it.hasNext()){
			out.write(it.next());
			out.newLine();
		}
		out.flush();
		out.close();
	}
	
	public void printCSVClassEstesa(ArrayList<String> lines,String path) throws IOException{
		File f = new File(path);
		if(!f.exists())
			f.createNewFile();
		int counter=0;
		BufferedWriter out = new BufferedWriter(new FileWriter(f));
//		out.write("POS;SQUADRA;PUNTEGGIO");
//		out.newLine();
		java.util.Iterator<String> it = lines.iterator();
		while(it.hasNext()){
			String line = it.next();
			if(line.contains("_")){
				String[] vals = line.split("_");
				out.write(vals[1]+";"+vals[3]+";"+vals[5]+";"+vals[7]+";"+vals[9]+";"+vals[11]+";");
				out.newLine();
			}else{
				out.write(line);
				out.newLine();
				out.newLine();
				out.newLine();
			}
			counter++;
		}
		out.flush();
		out.close();
	}
	
	public void loadCSVFiles(String[] files) throws Exception{
		for(int i =0;i<files.length;i++){
			BufferedReader in  = new BufferedReader(new FileReader(new File(files[i])));
			int counter=0;
			String line=null;
			String headerLine=null;
			int numCols;
			String[] cols=null;
			int indexSoc = 0,indexCognome=0,indexCat=0,indexPosCat=0,indexTipoClass=0,indexSesso=0;
			while((line=in.readLine())!=null){
				if(counter==0){
					headerLine=line;
					numCols=line.split(";").length;
					cols=headerLine.split(";");
					for(int j=0;j<cols.length;j++){
						if(cols[j].equalsIgnoreCase("Squadra"))
							indexSoc=j;
						else if(cols[j].equalsIgnoreCase("cognome"))
							indexCognome=j;
						else if(cols[j].equalsIgnoreCase("cat"))
							indexCat=j;
						else if(cols[j].equalsIgnoreCase("p.cat"))
							indexPosCat=j;
						else if(cols[j].equalsIgnoreCase("TipoClass"))
							indexTipoClass=j;
						else if(cols[j].equalsIgnoreCase("Sesso"))
							indexSesso=j;
					}
					counter++;
				}else{
					String[] values=line.split(";");
					String soc=values[indexSoc];
					String val="COGNOME_"+values[indexCognome]+"_CAT_"+values[indexCat]+"_PCAT_"+values[indexPosCat]+"_TIPOCLASS_"+values[indexTipoClass]+"_SESSO_"+values[indexSesso];
					if(socMap.containsKey(soc)){
						ArrayList<String> temp = socMap.get(soc);
						temp.add(val);
						socMap.put(soc, temp);
					}else{
						ArrayList<String> valSoc = new ArrayList<String>();
						valSoc.add(val);
						socMap.put(soc, valSoc);
					}
					counter++;		
				}
			}
			in.close();
			for(String key : socMap.keySet()){
				ArrayList<String> values = socMap.get(key);
//				Collections.sort(values, new ComparatorPunteggi());
				socMap.put(key, values);
				System.out.println("************************");
				System.out.println(key);
				for(int ind =0;ind<values.size();ind++)
					System.out.println(values.get(ind));
			}
//			System.out.println(counter);
//			for(String key : socMap.keySet())
//				for(int k=0;k<socMap.get(key).size();k++)
//					System.out.println(key+" : "+socMap.get(key).get(k)+" num:"+k);
		}
	}
	
	

}
